fix(scripts): bump-objectui.sh --help 用哨兵定界,改 header 不再静默截断 (#6425) - #6470
Merged
Conversation
`--help` 过去用硬编码行号 `sed -n '2,26p'` 打印自己的头注释,行号与 header 内容之间 没有任何机制耦合:往 header 加一行帮助就静默截断,删一行就越界打进下一段。两种情况都 exit 0、都打印了「一些东西」,所以截断的帮助和完整的帮助长得一模一样。 这不是假设。#5960 往 header 加了 pin 更新步骤,把真正的结尾从第 19 行推到第 26 行, PR #6421 只能手工挪这个魔法数字,并留下一条「请下一位作者注意」的 NOTE。注释不是机制。 改法是把行号换成哨兵 `# --help ends here`,让终止符与它所终止的内容放在一起: - `sed -n '2,/^# --help ends here$/p'` 取到哨兵为止。起始的 `2` 定位的是 shebang, 位置由 execve 固定,不随 header 内容漂移,因此不是会漂的行号。 - `grep -vxF` 按整行精确剔掉哨兵本身,而不是按子串过滤,header 里即便提到这句话也不会 被连带吃掉。 - 哨兵缺失时 exit 1 并说明如何恢复,而不是一路打印到 EOF(实测无此闸会吐出 231 行)。 闸只设在 --help 分支:删掉一条注释不该让真正的 pin bump 跑不起来。 同时删掉 `:66-68` 那条来自 PR #6421 的手工耦合 NOTE —— 哨兵落地后它即成假话,留着 只是把谎言搬个家。 验证:改动前后 `--help` 输出逐字节一致(25 行 / 1363 字节);往 header 加一行后新行 出现,而同一探针在旧脚本上被静默丢弃。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BDmDsu2575gDxeMCxXhDE3
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
hotlong
marked this pull request as ready for review
August 8, 2026 00:54
This was referenced Aug 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #6425
问题
scripts/bump-objectui.sh的--help用硬编码行号打印自己的头注释:行号与 header 内容之间没有任何机制耦合。往 header 加一行,帮助就静默截断;删一行,就越界打进下一段内部说明。两种情况都
exit 0、都打印了「一些东西」,所以截断的帮助和完整的帮助长得一模一样。这不是假设的风险,它已经触发过一次:#5960 往 header 加了 pin 更新步骤,把真正的结尾从第 19 行推到第 26 行,PR #6421 只能手工挪这个魔法数字,并留下上面那条「请下一位作者注意」的 NOTE。注释不是机制——它把责任转嫁给了下一位作者,而失败是静默的,下一位作者不会被任何东西提醒。
改法
把行号换成哨兵
# --help ends here,让终止符与它所终止的内容放在一起:header 末尾多一行哨兵,--help打到哨兵为止。相对 issue 里给出的形状,有三处刻意的偏离,逐条说明:
grep -vxF而不是grep -v -- '--help ends here'。 issue 的写法按子串过滤,会把 header 里任何提到这句话的行一并吃掉——而这次改动恰好需要在文件里写下哨兵的说明文字。-x(整行)+-F(字面量)只精确剔掉哨兵那一行。实测:脚本里该字符串按子串出现 6 次(第 27、73、84、85、89、90 行),整行精确匹配只命中 1 次(第 27 行,哨兵本身)——闸自己那行、报错文案那行、sed 那行、以及说明注释都不误伤。加了哨兵缺失的硬闸。
sed -n '2,/RE/p'在 RE 匹配不到时会一路打印到 EOF——那正是本卡要消灭的「静默失败」换了个方向。实测:删掉哨兵后,无闸的管道会吐出 231 行整个脚本。现在改为exit 1并说明如何恢复。闸只设在--help分支,不设在启动路径:删掉一条注释不该让真正的 pin bump 跑不起来。起始的
2保留。 严格说2也是行号,但它定位的是 shebang——位置由 execve 固定,不随 header 内容漂移。本卡要消灭的是结尾随 header 增删而漂移;开头不会漂。改成起始哨兵反而要多耦合一行文本,得不偿失。删掉的 NOTE(分诊硬要求)
:66-68那条来自 PR #6421 的「手工耦合」NOTE 在哨兵落地后即成假话,已在同一次改动里删除。留着它只是把谎言搬个家(同 #6458 的形状)。验证
1. 输出逐字节一致
同时断言输出非空且不含哨兵字符串——两者必须一起断言:单独一条「哨兵没出现」在输出全空时也会真空通过。
2. 加行探针:机制真的生效(先声明方向,再跑)
对改前和改后两份脚本施加同一探针,声明的预期方向是「旧红 / 新绿」:
2,26p)exit 0~/work/objectstack ← run from here被丢掉,exit 0四项实测结果与声明完全一致。探针 A 是本 issue 描述的截断;探针 B 是它的镜像(越界/挤掉),两个方向都复现了,且旧脚本两次都
exit 0——这正是「静默」的含义。探针改动只作用于仓库外的临时副本,未落入本 PR。3. 哨兵缺失闸
删掉哨兵后:
exit=1,stdout 0 字节(不是把整个文件吐出来),stderr 为✗ … sentinel is missing — cannot tell where the help text ends.门禁
pnpm lintpnpm typecheckpnpm check:objectui-changeset--self-test会复制并 execbump-objectui.shpnpm check:nul-bytes本仓库没有 shellcheck / shfmt 之类的 shell 脚本门(已核对
.github/workflows/*.yml与package.json全部check:*)——如实记录,未拿别的脚本顶替。Changeset
无。仓库内部开发工具,无对外发布面 ⇒ 不写 changeset,改为打
skip-changeset标签。刻意没做的事
sed -n '2,行号打印。bump-objectui.sh 的 pin changeset 只收 feat|fix 且静默截断到 40 条 —— 破坏性 refactor! 进不了前端发布记录 #4731 在同一脚本里修head -40静默截断是修法先例,不是额外范围。build-console.sh/check-console-sha.mjs/check-objectui-pin-fresh.mjs等其它 pin/refresh 脚本。content/docs/releases/。Generated by Claude Code